package main

import "fmt"

//参数 变量 返回值都可以是函数

//高阶函数

//函数 闭包
//正统的函数式编程 不可变性 不能有状态 函数只能有一个参数

func adder()func (i int)int{


	sum:=0

	return func(v int)int{
		fmt.Println("sum=",sum)
		sum+=v
		return sum
	}
}


type iAdd func(int)(int,iAdd)

func adder2(base int) iAdd{
	return func(v int)(int ,iAdd){
		fmt.Println(v)
		return base+v,adder2(base+v)
	}
}
func main() {
	a:=adder2(0)
	for i:=0;i<10;i++{
		var s int
		s,a=a(i)
		fmt.Printf("0+1+...+ %d =%d \n ",i,s)
	}
}
